package mall.promotion;

import mall.common.enums.PromotionTypeEnum;
import mall.pojo.ProductDO;

import java.util.List;

/**
 * 促销活动 的策略接口
 * @author zmy
 */
public interface PromotionStrategy {
    /** 获取当前促销的 ID */
    String getId();
    /** 促销活动名称 */
    String getName();
    /** 获取促销活动的类型 */
    String getPromotionType();
    /** 设置活动的类型 */
    void setPromotionType(PromotionTypeEnum typeEnum);
    /** 促销活动是否开启 */
    boolean isEnabled();
    /** 设置活动的开启 */
    void setEnabled(boolean enabled);
    /** 获取优先级 */
    int getPriority();
    /** 判断是否是要进行促销活动的商品 */
    boolean isApplicable(List<ProductDO> shopCar);
    /** 计算活动减免的价格 */
    double apply(List<ProductDO> shopCar);

    /**
     * 新增活动的商品
     * @param productIds    要增加的商品id
     */
    void addProduct(List<String> productIds);
    /**
     * 移除活动的商品
     * @param productIds    要移除的商品id
     */
    void removeProduct(List<String> productIds);
}
